package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.EcologyCastConf;
import com.sc.nft.entity.EcologyReforgeConf;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.vo.ecology.*;
import com.sc.nft.exception.GlobalException;

import java.util.List;

public interface EcologyReforgeConfService {
    /**
     * 根据状态获取列表
     *
     * @param status
     * @return
     */
    List<EcologyReforgeConf> getListByStatus(Boolean status);

    /**
     * 回流库存
     *
     * @param ecologyReforgeConf
     */
    void addProductStock(EcologyReforgeConf ecologyReforgeConf);


    /**
     * 获取生态铸造配置
     *
     * @param id
     * @return
     */
    EcologyReforgeConf getById(Long id);

    /**
     * 获取生态铸造列表
     *
     * @return
     */
    Page<EcologyReforgeListVO> list(Integer pageNo, Integer pageSize,Long userCreatorId,UserInfo userInfo);

    /**
     * 获取生态铸造详情
     *
     * @param id
     * @return
     */
    EcologyReforgeDetailsVO details(Long id, UserInfo user);

    /**
     * 获取铸造所需数量
     *
     * @param id
     * @param count
     * @param user
     * @return
     */
    List<EcologyReforgeExpendVO> preExpendDetails(Long id, Integer count, UserInfo user);

    /**
     * 铸造
     *
     * @param id
     * @param count
     * @param user
     */
    void expend(Long id, Integer count, UserInfo user) throws GlobalException;

    /**
     * 获取铸造消耗记录
     *
     * @param user
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<ExpendEcologyReforgeRecordsVO> expendRecords(UserInfo user, Integer pageNo, Integer pageSize);


    /**
     * 重铸记录列表
     *
     * @param user
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<UserReforgeExpendRecordsPageVO> expendRecordsPage(UserInfo user, Integer pageNo, Integer pageSize,Long userCreatorId);

    /**
     * 重铸记录详情
     *
     * @param user
     * @param id
     * @return
     */
    List<ExpendEcologyReforgeRecordsVO> expendRecordsDetails(UserInfo user, Long id);

    /**
     * 用户重铸上限记录
     *
     * @param user
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<UserEcologyReforgeUpperLimitDetailsVO> userEcologyReforgeUpperLimitDetails(UserInfo user, Long id, Integer pageNo, Integer pageSize);



}
